package cn.tedu.api;

/**
 * @Author 金帮嘉诚
 * @Date 2021-06-15 周二 15:38
 */
/*本类用于测试Strings类的用法*/

/**
 知识点：
 1.String 两种创建方式
   1）字符数组： char[] ch = {'a','b','c'};
      用字符数组初始化String ：String st =new String(ch);
   2）直接赋值：String st="abc";
 2.==和equals（）在两种方式下的区别
   直接赋值时，会在常量池创建对象，如果两个都是直接赋值且属性值相等 使用equals和==效果都是true
 */
public class TestString {
    public static void main(String[] args) {
        //
        /*1.字符串底层维护的是一个char[],对象存在堆中*/
        char[] value={'a','b','c'};
        String s1=new String(value);
        String s2=new String(value);
        //
        System.out.println("s2==s1 = " + (s2==s1));//false
//        System.out.println("s1==s1 = " + (s1==s1));true
        /*String底层也重写了equals（）方法，比较的是两个串的具体内容而不是地址值*/
        System.out.println("(s2.equals(s1)) = " + (s2.equals(s1)));
        
        //2.String创建方法
        /*此种创建方式有一个高效的效果，底层也会new String（）
        * 但是存在堆中的常量池中，第二次创建时会查看之前是否创建，
        * 如果有就不再创建，效率高，只有这种创建方式才有高效的效果*/
        String s="abc";
        String ss="abc";
        System.out.println("(s==ss) = " + (s==ss));//true
        System.out.println("s.equals(ss) = " + s.equals(ss));//true

    }
}

